package main

import (
	"encoding/json"
	"net/http"
	"strconv"
	"time"

	"github.com/gin-gonic/gin"
)

func CtrlCheck(ctx *gin.Context) {
	if data, ok := ctx.Params.Get("data"); !ok {
		ctx.JSON(http.StatusOK, gin.H{
			"status": false,
			"msg":    "格式错误: 无数据",
		})
		return
	} else if sid, err := strconv.Atoi(data); err != nil {
		ctx.JSON(http.StatusOK, gin.H{
			"status": false,
			"msg":    "格式错误: 解析失败: " + err.Error(),
		})
		return
	} else {
		ctx.JSON(http.StatusOK, ModelCheck(sid))
	}
}

func CtrlInsert(ctx *gin.Context) {
	var form FormIn
	if data, ok := ctx.Params.Get("data"); !ok {
		ctx.JSON(http.StatusOK, gin.H{
			"status": false,
			"msg":    "格式错误: 无数据",
		})
		return
	} else if err := json.Unmarshal([]byte(data), &form); err != nil {
		ctx.JSON(http.StatusOK, gin.H{
			"status": false,
			"msg":    "格式错误: 解析失败: " + err.Error(),
		})
		return
	} else {
		ctx.JSON(http.StatusOK, ModelInsert(form))
	}
}

func getInt(str string, ok bool) *int {
	if !ok {
		return nil
	} else if i, err := strconv.Atoi(str); err != nil {
		return nil
	} else {
		ni := new(int)
		*ni = i
		return ni
	}
}
func getTime(str string, ok bool) *time.Time {
	if !ok {
		return nil
	} else if i, err := time.ParseInLocation("2006-01-02 15:04:05", str, time.FixedZone("CST", 8*3600)); err != nil {
		return nil
	} else {
		ni := new(time.Time)
		*ni = i
		return ni
	}
}
func CtrlManageInit(ctx *gin.Context) {
	if b := getInt(ctx.Params.Get("b")); b == nil {
		ctx.JSON(http.StatusOK, gin.H{
			"status": false,
			"msg":    "格式错误: b",
		})
		return
	} else if e := getInt(ctx.Params.Get("e")); e == nil {
		ctx.JSON(http.StatusOK, gin.H{
			"status": false,
			"msg":    "格式错误: e",
		})
		return
	} else if tb := getTime(ctx.Params.Get("tb")); tb == nil {
		ctx.JSON(http.StatusOK, gin.H{
			"status": false,
			"msg":    "格式错误: tb",
		})
		return
	} else if te := getTime(ctx.Params.Get("te")); te == nil {
		ctx.JSON(http.StatusOK, gin.H{
			"status": false,
			"msg":    "格式错误: te",
		})
		return
	} else if tdstr, ok := ctx.Params.Get("td"); !ok {
		ctx.JSON(http.StatusOK, gin.H{
			"status": false,
			"msg":    "格式错误: td",
		})
		return
	} else if tdt, err := time.ParseInLocation("2006-01-02", tdstr, time.FixedZone("CST", 8*3600)); err != nil || tdstr != tdt.Format("2006-01-02") {
		ctx.JSON(http.StatusOK, gin.H{
			"status": false,
			"msg":    "格式错误: td",
		})
		return
	} else {
		ctx.JSON(http.StatusOK, ModelInit(*b, *e, *tb, *te, tdstr))
	}
}

// func CtrlManageInit(ctx *gin.Context) {
// 	if bstr, ok := ctx.Params.Get("b"); !ok {
// 		ctx.JSON(http.StatusOK, gin.H{
// 			"status": false,
// 			"msg":    "格式错误: b",
// 		})
// 		return
// 	} else if b, err := strconv.Atoi(bstr); err != nil {
// 		ctx.JSON(http.StatusOK, gin.H{
// 			"status": false,
// 			"msg":    "格式错误: b not int: " + err.Error(),
// 		})
// 		return
// 	} else if estr, ok := ctx.Params.Get("e"); !ok {
// 		ctx.JSON(http.StatusOK, gin.H{
// 			"status": false,
// 			"msg":    "格式错误: no e",
// 		})
// 		return
// 	} else if e, err := strconv.Atoi(estr); err != nil {
// 		ctx.JSON(http.StatusOK, gin.H{
// 			"status": false,
// 			"msg":    "格式错误: e not int: " + err.Error(),
// 		})
// 		return
// 	} else {
// 		ctx.JSON(http.StatusOK, ModelInit(b, e))
// 	}
// }
// func CtrlManageInit(ctx *gin.Context) {
// 	if bstr, ok := ctx.Params.Get("b"); !ok {
// 		ctx.JSON(http.StatusOK, gin.H{
// 			"status": false,
// 			"msg":    "格式错误: b",
// 		})
// 		return
// 	} else if b, err := strconv.Atoi(bstr); err != nil {
// 		ctx.JSON(http.StatusOK, gin.H{
// 			"status": false,
// 			"msg":    "格式错误: b not int: " + err.Error(),
// 		})
// 		return
// 	} else if estr, ok := ctx.Params.Get("e"); !ok {
// 		ctx.JSON(http.StatusOK, gin.H{
// 			"status": false,
// 			"msg":    "格式错误: no e",
// 		})
// 		return
// 	} else if e, err := strconv.Atoi(estr); err != nil {
// 		ctx.JSON(http.StatusOK, gin.H{
// 			"status": false,
// 			"msg":    "格式错误: e not int: " + err.Error(),
// 		})
// 		return
// 	} else {
// 		ctx.JSON(http.StatusOK, ModelInit(b, e))
// 	}
// }

func CtrlManageStat(ctx *gin.Context) {
	ctx.JSON(http.StatusOK, ModelStat())
}

func CtrlManageClear(ctx *gin.Context) {
	ctx.JSON(http.StatusOK, ModelClear())
}
